package com.sh.serializer;


import com.sh.spi.SpiLoader;

/**
 * 序列化器工厂
 * 工厂 + 单例
 *  todo: 策略模式
 */
public class SerializerFactory {

    /**
     * 映射   就是Map
     */
/*
   private static final Map<String, Serializer> KEY_SERIALIZER_MAP =new HashMap(){{
                put(SerializerKeys.JDK, new JdkSerializer());
                put(SerializerKeys.JSON, new JsonSerializer());
                put(SerializerKeys.HESSIAN, new HessianSerializer());
//                put(SerializerKeys.KRYO, new KryoSerializer());
    }};
    // 默认序列化器
    private static final Serializer DEFAULT_SERIALIZER = KEY_SERIALIZER_MAP.get(SerializerKeys.JDK);
    // 获取实例的方法
    public static Serializer getInstance(String key) {
        // 如果存在存在 key对应的序列化器，则返回该序列化器
        // 否则返回默认的序列化器
        return KEY_SERIALIZER_MAP.getOrDefault(key, DEFAULT_SERIALIZER);
    }
*/

    static {
        SpiLoader.load(Serializer.class);
    }

    // 默认序列化器
    private static final Serializer DEFAULT_SERIALIZER = new JdkSerializer();

    // 获取实例的方法
    public static Serializer getInstance(String key) {
        return SpiLoader.getInstance(Serializer.class, key);
    }

}

//com.sh.serializer.Serializer.java